package test_junit_merchant.ProductStock;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import util.BaseDriver;

import java.util.List;
import java.util.UUID;

/***
 * Created by Eric on 2018/2/1.
 * 商户-产品 功能
 */
public class ProductList extends BaseDriver {
    private static ProductList productList = new ProductList();

    public static ProductList getInstance() {
        return productList;
    }

    private ProductList() {
    }

    public void selectCategory() throws InterruptedException {
        // 切换到产品目录树的iframe
        driver.switchTo().defaultContent();
        driver.switchTo().frame(driver.findElement(By.name("iframeundefined")));
        driver.switchTo().frame(driver.findElement(By.id("type_frame")));
        Thread.sleep(1000);

        // 产品目录
        driver.findElement(By.xpath("//a[contains(text(), '车载用品（汽车用品）')]/preceding-sibling::i[1]")).click();
        Thread.sleep(1000);
        driver.findElement(By.xpath("//a[contains(text(), '其他精品')]/preceding-sibling::i[1]")).click();
        Thread.sleep(1000);
        driver.findElement(By.linkText("测试目录")).click();
        Thread.sleep(1000);
    }

    /**
     * 新建
     *
     * @param productName    产品名
     * @param suggestedPrice 参考进货价
     * @param purchasePrice  门店定价
     * @param shortName      （移动端）产品名
     * @param guidePrice     厂商指导价
     */
    public void add(String productName, String suggestedPrice, String purchasePrice, String shortName, String guidePrice) throws InterruptedException {
        // 切换到产品目录树的iframe
        driver.switchTo().defaultContent();
        driver.switchTo().frame(driver.findElement(By.name("iframeundefined")));
        driver.switchTo().frame(driver.findElement(By.id("table_frame")));
        // 统计产品名为：productName的行
        int ssize = driver.findElements(By.xpath("//td[contains(text(), '" + productName + "')]/../td[1]/input")).size();

        // 切换到新增窗体
        driver.findElement(By.xpath("//button[@onclick='addInfo()']")).click();
        Thread.sleep(1000);
        driver.switchTo().frame(0);

        // 产品名称
        driver.findElement(By.name("productName")).sendKeys(productName);
        // 产品类型
        driver.findElement(By.xpath("//select[@name='type']/option[2]")).click();
        // 产品等级
        driver.findElement(By.xpath("//select[@name='level']/option[2]")).click();
        // 参考进货价
        driver.findElement(By.name("suggestedPrice")).sendKeys(suggestedPrice);
        // 门店定价
        driver.findElement(By.name("purchasePrice")).sendKeys(purchasePrice);
        // 产品名称（移动端）
        driver.findElement(By.name("shortName")).sendKeys(shortName);
        //产品编码
        driver.findElement(By.name("productNo")).sendKeys(UUID.randomUUID().toString().replace("-", ""));

        // 下一步
        driver.switchTo().parentFrame();
        driver.findElement(By.linkText("下一步")).click();
        Thread.sleep(1000);
        driver.switchTo().frame(0);

        // 品牌
        driver.findElement(By.xpath("//select[@name='brand.id']/option[contains(text(), '埃尔夫')]")).click();
        // 耗用单位
        driver.findElement(By.xpath("//select[@name='stockUnitGroupId']/option[2]")).click();
        driver.findElement(By.xpath("//select[@name='stockUnit.id']/option[2]")).click();
        // 厂家编号
        driver.findElement(By.name("manufacturerNo")).sendKeys("测试编号");
        // 型号类型
        driver.findElement(By.name("productType")).sendKeys("测试型号");
        // 规格u/参数
        driver.findElement(By.name("spec")).sendKeys("测试规格参数");
        // 厂家指导价
        driver.findElement(By.name("attrDto.manufacturerPrice")).sendKeys(guidePrice);
        // 批发起始量
        driver.findElement(By.name("attrDto.combinationMinAmount")).sendKeys("30000");
        // 标准条形码
        driver.findElement(By.name("barcode")).sendKeys(UUID.randomUUID().toString());
        // 保质期限
        driver.findElement(By.name("attrDto.durabilityPeriod")).sendKeys("120");
        // 临界预警值
        driver.findElement(By.name("attrDto.durabilityPreWarm")).sendKeys("30");
        // 库存下限
        driver.findElement(By.name("attrDto.minStockAmount")).sendKeys("12000");

        // 下一步
        driver.switchTo().parentFrame();
        driver.findElement(By.linkText("下一步")).click();
        Thread.sleep(1000);
        driver.switchTo().frame(0);

        // 门店价格
        driver.findElement(By.name("shopPrice")).sendKeys("12000");
        // 批发价
        driver.findElement(By.name("combinationPrice")).sendKeys("12000");
        // 默认仓库
        driver.findElement(By.xpath("//select[@name='defaultWarehouse.id']/option[2]")).click();
        // 商城销售价
        driver.findElement(By.name("onlinePrice")).sendKeys("120000");
        // 最低销售价
        driver.findElement(By.name("minRetailPrice")).sendKeys("12000");
        // 连锁专供价
        driver.findElement(By.name("chainPrice")).sendKeys("12000");
        // 联盟结算价
        driver.findElement(By.name("leaguePrice")).sendKeys("12000");

        // 下一步
        driver.switchTo().parentFrame();
        driver.findElement(By.linkText("下一步")).click();
        Thread.sleep(2000);

        driver.findElement(By.linkText("确定")).click();
        Thread.sleep(2000);

        // 操作的结果检测
        int size = driver.findElements(By.xpath("//td[contains(text(), '" + productName + "')]/../td[1]/input")).size();
        if (size == ssize + 1) {
            System.out.println("新增产品成功 名为：" + productName);
        } else {
            System.err.println("新增产品失败 名为：" + productName);
        }
    }

    public void delete(String productName) throws InterruptedException {
        driver.switchTo().defaultContent();
        driver.switchTo().frame(driver.findElement(By.name("iframeundefined")));
        driver.switchTo().frame(driver.findElement(By.id("table_frame")));
        Thread.sleep(1000);

        // 选择所有产品名为 productName 的，并删除
        List<WebElement> webElements = driver.findElements(By.xpath("//td[contains(text(), '" + productName + "')]/../td[1]/input"));
        if (webElements.size() == 0) {
            System.out.printf("名为：%s 的产品不存在", productName);
        }
        for (WebElement e : webElements) {
            e.click();
            Thread.sleep(500);
        }
        driver.findElement(By.xpath("//button[@onclick='del();']")).click();
        Thread.sleep(1000);
        driver.findElement(By.linkText("确定")).click();
        Thread.sleep(2000);

        // 操作的结果检测
        int size = driver.findElements(By.xpath("//td[contains(text(), '" + productName + "')]/../td[1]/input")).size();
        if (size == 0) {
            System.out.println("删除产品成功 产品名为：" + productName);
        } else {
            System.err.println("删除产品失败 产品名为：" + productName);
        }
    }

    public void batchSet(String productName) throws InterruptedException {
        driver.switchTo().defaultContent();
        driver.switchTo().frame(driver.findElement(By.name("iframeundefined")));
        driver.switchTo().frame(driver.findElement(By.id("table_frame")));

        // 选择所有产品名为 productName 的产品；批量设置
        List<WebElement> webElements = driver.findElements(By.xpath("//td[contains(text(), '" + productName + "')]/../td[1]/input"));
        for (WebElement e : webElements) {
            e.click();
            Thread.sleep(500);
        }

        // 点击批量设置
        driver.findElement(By.xpath("//button[@onclick='batch()']")).click();
        Thread.sleep(1000);

        // 切换到批量设置窗体
        driver.switchTo().frame(0);

        // 分类
        driver.findElement(By.xpath("//select[@name='categoryId1']/option[contains(text(), '车载用品（汽车用品）')]")).click();
        Thread.sleep(500);
        driver.findElement(By.xpath("//select[@name='categoryId2']/option[contains(text(), '其他精品')]")).click();
        Thread.sleep(500);
        driver.findElement(By.xpath("//select[@name='category.id']/option[contains(text(), '测试目录')]")).click();
        Thread.sleep(500);

        // 适用车型
        driver.findElement(By.xpath("//select[@name='vbrand']/option[2]")).click();
        Thread.sleep(500);
        driver.findElement(By.xpath("//select[@name='vseries']/option[2]")).click();
        Thread.sleep(500);
        driver.findElement(By.xpath("//select[@name='matchedVehicleType']/option[2]")).click();
        Thread.sleep(500);

        // 品牌
        driver.findElement(By.xpath("//select[@name='brand.id']/option[contains(text(), 'CYS')]")).click();
        // 产品用途
        driver.findElement(By.xpath("//select[@name='type']/option[2]")).click();
        // 状态
        driver.findElement(By.xpath("//select[@name='status']/option[2]")).click();

        driver.switchTo().parentFrame();
        driver.findElement(By.linkText("确定")).click();

        Thread.sleep(2000);

        // 操作结果确认
        webElements = driver.findElements(By.xpath("//td[contains(text(), '" + productName + "')]/preceding-sibling::td[4]/input/../../td[8]"));
        for (WebElement element : webElements) {
            if (!element.getText().equals("CYS")) {
                System.err.println("批量设置产品失败 产品名为：" + productName);
                return;
            }
        }
        System.out.println("批量设置产品成功 产品名为：" + productName);
        return;
    }
}
